/* * This is part of Geomajas, a GIS framework, http://www.geomajas.org/. * * Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium. * * The program is available in open source according to the GNU Affero * General Public License. All contributions in this program are covered * by the Geomajas Contributors License Agreement. For full licensing * details, see LICENSE.txt in the project root. */ package org.geomajas.gwt2.plugin.print.client.event; import org.geomajas.gwt2.plugin.print.client.event.PrintFinishedInfo.HttpMethod; import org.geomajas.gwt2.plugin.print.client.util.UrlBuilder; import com.google.gwt.dom.client.Style; import com.google.gwt.event.dom.client.LoadEvent; import com.google.gwt.event.dom.client.LoadHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.FormPanel; import com.google.gwt.user.client.ui.Frame; import com.google.gwt.user.client.ui.Hidden; import com.google.gwt.user.client.ui.RootPanel; /** * Default implementation of {@link PrintRequestHandler}. It will do nothing on a {@link PrintRequestStartedEvent}. On a * {@link PrintRequestFinishedEvent}, it open or download the printed document, depending on the event information. * * @author Jan Venstermans */ public class DefaultPrintRequestHandler implements PrintRequestHandler { @Override public void onPrintRequestStarted(PrintRequestStartedEvent event) { // do nothing } @Override public void onPrintRequestFinished(PrintRequestFinishedEvent event) { PrintFinishedInfo info = event.getPrintFinishedInfo(); if (info.getMethod() == HttpMethod.GET) { switch (info.getPostPrintAction()) { case SAVE: createHiddenFrame(info); break; case OPEN: default: UrlBuilder builder = new UrlBuilder(info.getUrl()); for (String name : info.getParams().keySet()) { builder.addParameter(name, info.getParams().get(name)); } Window.open(builder.toString(), "_blank", null); break; } } else { createHiddenForm(info); } } private void createHiddenForm(PrintFinishedInfo info) { final FormPanel panel; switch (info.getPostPrintAction()) { case SAVE: panel = new FormPanel(); break; case OPEN: default: panel = new FormPanel("_blank"); break; } panel.setVisible(false); panel.setPixelSize(0, 0); panel.setAction(info.getUrl()); panel.setMethod(FormPanel.METHOD_POST); FlowPanel fieldsPanel = new FlowPanel(); panel.add(fieldsPanel); for (String name : info.getParams().keySet()) { fieldsPanel.add(new Hidden(name, info.getParams().get(name))); } panel.getElement().getStyle().setPosition(Style.Position.ABSOLUTE); panel.getElement().getStyle().setBorderWidth(0, Style.Unit.PX); RootPanel.get().add(panel); panel.submit(); } private void createHiddenFrame(PrintFinishedInfo info) { final Frame frame = new Frame(); frame.setVisible(false); UrlBuilder builder = new UrlBuilder(info.getUrl()); for (String name : info.getParams().keySet()) { builder.addParameter(name, info.getParams().get(name)); } frame.setUrl(builder.toString()); frame.setPixelSize(0, 0); frame.getElement().getStyle().setPosition(Style.Position.ABSOLUTE); frame.getElement().getStyle().setBorderWidth(0, Style.Unit.PX); frame.addLoadHandler(new LoadHandler() { @Override public void onLoad(LoadEvent event) { frame.removeFromParent(); } }); RootPanel.get().add(frame); } }